package br.com.sisgerenciamento.dto.cliente;

import java.io.Serializable;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;

import br.com.sisgerenciamento.dto.endereco.EnderecoDTO;
import br.com.sisgerenciamento.dto.usuario.UsuarioDTO;
import br.com.sisgerenciamento.exceptions.ApplicationException;
import br.com.sisgerenciamento.model.cliente.ClienteVO;
import br.com.sisgerenciamento.model.cliente.TipoClienteEnum;
import br.com.sisgerenciamento.model.endereco.EnderecoVO;
import br.com.sisgerenciamento.utilidades.TreatDate;
import br.com.sisgerenciamento.utilidades.Validator;

public class ClienteDTO implements Serializable {

	private static final long serialVersionUID = 1L;
	
	private String codigo;
	private String dataCadastro;
	private String nome;
	private String dataNascimento;
	private String cpf;
	private String rg;
	private String cnpj;
	private String ie;
	private String telefone;
	private String telefone2;
	private String celular;
	private String celular2;
	private String email;
	private String status;
	private UsuarioDTO usuario;
	private Integer tipo;
	private List<EnderecoDTO> enderecos;
	
	public ClienteVO getVO(){
		ClienteVO vo = new ClienteVO();
		vo.setEnderecos(new ArrayList<EnderecoVO>());
		Validator validator = Validator.novo();
		
		vo.setCodigo(!validator.isNullOrZero(getCodigo()) ? new Long(getCodigo()) : null );
		if(getEnderecos() != null)
			for (EnderecoDTO dto : getEnderecos()) {
				EnderecoVO enderecoVO = dto.getVO();
				enderecoVO.setCliente(vo);
				vo.getEnderecos().add(enderecoVO);
			}
		vo.setDataCadastro(TreatDate.parseDate(getDataCadastro()));
		vo.setNome(getNome() != null ? getNome().toUpperCase() : getNome());
		if(getDataNascimento() != null){
			vo.setDataNascimento(TreatDate.parseDate(getDataNascimento()));
		}
		vo.setCpf(getCpf());
		vo.setCnpj(getCnpj());
		vo.setIe(getIe());
		vo.setRg(getRg());
		vo.setTelefone(getTelefone());
		vo.setTelefone2(getTelefone2());
		vo.setCelular(getCelular());
		vo.setCelular2(getCelular2());
		vo.setEmail(getEmail());
		vo.setStatus(new Boolean("1".equals(getStatus())) ? true : false );
		try {
			if(getUsuario() != null)
				vo.setUsuario(getUsuario().getVO());
			
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
		vo.setTipo(TipoClienteEnum.getByValor(getTipo()));
		
		
		return vo;
	}
	
	public void validar() throws ApplicationException{
		Validator validator = Validator.novo();
		
		setCelular(validator.removerMascara(getCelular()));
		setCelular2(validator.removerMascara(getCelular2()));
		setTelefone(validator.removerMascara(getTelefone()));
		setTelefone2(validator.removerMascara(getTelefone2()));
		setCpf(validator.removerMascara(getCpf()));
		setCnpj(validator.removerMascara(getCnpj()));
		setIe(validator.removerMascara(getIe()));
		validator.obrigatorio(getNome()/*, getEnderecos()*/);
		
		
	}
	
	public String getCodigo() {
		return codigo;
	}
	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}
	public String getDataCadastro() {
		return dataCadastro;
	}
	public void setDataCadastro(String dataCadastro) {
		this.dataCadastro = dataCadastro;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getDataNascimento() {
		return dataNascimento;
	}
	public void setDataNascimento(String dataNascimento) {
		this.dataNascimento = dataNascimento;
	}
	public String getCpf() {
		return cpf;
	}
	public void setCpf(String cpf) {
		this.cpf = cpf;
	}
	public String getRg() {
		return rg;
	}
	public void setRg(String rg) {
		this.rg = rg;
	}
	public String getTelefone() {
		return telefone;
	}
	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}
	public String getCelular() {
		return celular;
	}
	public void setCelular(String celular) {
		this.celular = celular;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getStatus() {
		return status;
	}
	public void setStatus(String status) {
		this.status = status;
	}
	public UsuarioDTO getUsuario() {
		return usuario;
	}
	public void setUsuario(UsuarioDTO usuario) {
		this.usuario = usuario;
	}
	public Integer getTipo() {
		return tipo;
	}
	public void setTipo(Integer tipo) {
		this.tipo = tipo;
	}
	public List<EnderecoDTO> getEnderecos() {
		return enderecos;
	}
	public void setEnderecos(List<EnderecoDTO> enderecos) {
		this.enderecos = enderecos;
	}
	public String getTelefone2() {
		return telefone2;
	}
	public void setTelefone2(String telefone2) {
		this.telefone2 = telefone2;
	}
	public String getCelular2() {
		return celular2;
	}
	public void setCelular2(String celular2) {
		this.celular2 = celular2;
	}

	public String getCnpj() {
		return cnpj;
	}

	public void setCnpj(String cnpj) {
		this.cnpj = cnpj;
	}

	public String getIe() {
		return ie;
	}

	public void setIe(String ie) {
		this.ie = ie;
	}
	
	
}
	